import 'package:app_core/app_core.dart';
import 'package:yh_core_flutter_project/project/common/constant/keys.dart';

/// 统一存储管理工具
class StorageUtil {
  StorageUtil._();

  // ==================== 用户相关存储 ====================
  
  /// 设置用户Token
  static Future<bool> setUserToken(String token) {
    return SharedPUtil.putString(SpKeys.userToken, token);
  }

  /// 获取用户Token
  static String? getUserToken() {
    return SharedPUtil.getString(SpKeys.userToken);
  }

  /// 移除用户Token
  static Future<bool> removeUserToken() {
    return SharedPUtil.remove(SpKeys.userToken);
  }


  /// 设置用户信息
  static Future<bool> setUserInfo(Map<String, dynamic> userInfo) {
    return SharedPUtil.putObject(SpKeys.userInfo, userInfo);
  }

  /// 获取用户信息
  static Map<String, dynamic>? getUserInfo() {
    return SharedPUtil.getObject(SpKeys.userInfo);
  }

  /// 移除用户信息
  static Future<bool> removeUserInfo() {
    return SharedPUtil.remove(SpKeys.userInfo);
  }


  /// 清除用户相关数据
  static Future<bool> clearUserData() async {
    await removeUserToken();
    await removeUserInfo();
    return true;
  }

  // ==================== 应用状态存储 ====================

  /// 设置是否第一次登录
  static Future<bool> setIsFirstLogin(bool isFirst) {
    return SharedPUtil.putBool(SpKeys.isFirstLogin, isFirst);
  }

  /// 获取是否第一次登录
  static bool getIsFirstLogin({bool defaultValue = true}) {
    return SharedPUtil.getBool(SpKeys.isFirstLogin, defValue: defaultValue) ?? defaultValue;
  }

  // ==================== 计算属性 ====================

  /// 检查用户是否已登录（基于Token是否存在）
  static bool get isLoggedIn {
    final token = getUserToken();
    return token != null && token.isNotEmpty;
  }

  /// 检查是否需要显示欢迎页（基于是否第一次登录）
  static bool get shouldShowWelcome {
    return getIsFirstLogin();
  }

  /// 清除所有应用数据
  static Future<bool> clearAppData() async {
    await SharedPUtil.remove(SpKeys.isFirstLogin);
    return true;
  }


  // ==================== 工具方法 ====================
  /// 获取所有存储键
  static Set<String> getAllKeys() {
    return SharedPUtil.getKeys();
  }

  /// 获取存储大小
  static int getStorageSize() {
    return SharedPUtil.getSize();
  }

  /// 清空所有数据
  static Future<bool> clearAll() {
    return SharedPUtil.clear();
  }

  /// 检查是否包含指定键
  static bool containsKey(String key) {
    return SharedPUtil.containsKey(key);
  }

}

